//
//  WBStatusListViewModel.swift
//  czWB
//
//  Created by Qing on 2018/11/22.
//  Copyright © 2018年 成哥哥. All rights reserved.
//

import Foundation


/// 下拉刷新最大次数
private let maxPullupTryTimes = 3

class WBStatusListViewModel {
    
    /// 微博数据视图模型
    lazy var statusViewModel = [WBStatusViewModel]()
    
    /// 下拉刷新使有效次数，每次刷新加1，大于3时，不再向系统请求数据，避免多次向服务器发起请求被封
    private var pullupErrorTimes = 0
    
    
    /// 加载微博数据视图模型方法
    ///
    /// - Parameters:
    ///   - isPullup: 是否上拉刷新状态
    ///   - completion: 回调
    func loadStatus (isPullup: Bool, completion: @escaping (_ isSuccess: Bool, _ shouldRefresh: Bool) -> ()) {
        
        if isPullup && pullupErrorTimes >= maxPullupTryTimes {
            
            completion(true, false)
            
            return
            
        }
        
        /// 微博首条内容ID, 用于判断下拉刷新，若指定此参数，则返回ID比since_id大的微博（即比since_id时间晚的微博），默认为0
        let sinc_id = isPullup ? 0 : self.statusViewModel.first?.status.id ?? 0
        
        /// 微博最后一条内容ID，用于上拉刷新判断，若指定此参数，则返回ID小于或等于max_id的微博，默认为0。
        let max_id = !isPullup ? 0 : Int64((self.statusViewModel.last?.status.id)! - 1) ?? 0
        
        
        WBNetworkManager.shared.statuseList (since_id: sinc_id, max_id: max_id) { (results, isSuccess) in
            
            /// json数据转字典
            guard let array = results as? [String: Any] else {
                
                print("json数据转换[String: Any]失败")
                completion(isSuccess, false)
                return
            }

            /// 字典转数组遍历
            guard let data = array["statuses"] as? [Any] else {

                print("statuses 转换 [Any]失败")
                completion(isSuccess, false)
                return
            }

//            实例化视图模型
            var list = [WBStatusViewModel]()

//            字典转模型
            for dict in data {
                
                list.append(WBStatusViewModel.init(model: WBStatuses(dict: dict as! [String: Any])))
//                print(dict)
            }
            
            print(list)
//            print(data)
            
            
            if isPullup {
//              上拉刷新拼接新内容。从这里看出，isPullup一直是true，之前刷新后，isPullup没有改false
                self.statusViewModel += list
                self.pullupErrorTimes += 1
                print("上拉刷新：新增了\(list.count)条内容")
                completion(isSuccess,true)
                print("上拉刷新上限总共3次，现在是第：\(self.pullupErrorTimes)次")
                
            } else {
                
//              下拉刷新拼接新增内容
                self.statusViewModel = list + self.statusViewModel
                print("下拉刷新： 新增了\(list.count)条内容")
                completion(isSuccess, true)
                
            }

        }
    }
}
